package main

import (
	"flag"
	"fmt"
	"log"
	"net/http"
	"github.com/gorilla/mux"
)

var (
	hostname   string
	port       int
)

/* register command line options */
func init() {
	/*flag实现命令行参数解析，flag绑定到一个变量，使用Var系列函数*/
	//StringVar用指定的名称、默认值、使用信息注册一个string类型flag，并将flag的值保存到p指向的变量。
	flag.StringVar(&hostname, "hostname", "0.0.0.0", "The hostname or IP on which the REST server will listen")
	flag.IntVar(&port, "port", 8080, "The port on which the REST server will listen")
}

func main() {
	flag.Parse()
	var address = fmt.Sprintf("%s:%d", hostname, port)
	log.Println("REST service listening on", address)

	// register router
	/*StrictSlash如果为true，则如果路由路径为“/path/”，则访问“/path”将执行到前者的重定向，反之亦然。*/
	router := mux.NewRouter().StrictSlash(true)//初始化路由
	router.
		HandleFunc("/api/service/get", MyGetHandler).//路由注册
		Methods("GET") //指定http方法
	router.
		HandleFunc("/api/service/{servicename}/post", MyPostHandler). //路由注册
		Methods("POST")//HTTP post方法

	// start server listening
	err := http.ListenAndServe(address, router)
	if err != nil {
		log.Fatalln("ListenAndServe err:", err)//监听服务端口
	}

	log.Println("Server end")
}
